/*
     利用函数指针实现计算器(求两个整型数据的加减乘除)

     夏思成

     2024年3月18日
*/

#include <stdio.h>

//加法函数
int Add(int x, int y)
{
    return x + y;
}

//减法函数
int Min(int x, int y)
{
    return x - y;
}

//乘法函数
int Mul(int x, int y)
{
    return x * y;
}

//除法函数
int Div(int x, int y)
{
    return x / y;
}

//选择函数，利用函数指针，来调用所需要的函数
void calc(int(*pf)(int, int))
{
    printf("请输入两个整数:\n");
    int a = 0;
    int b = 0;
    scanf("%d %d", &a, &b);
    printf("计算结果为\n");
    printf("%d\n", pf(a, b));
}

//打印菜单函数
void Print()
{
    printf("**********************\n");
    printf("********1.0 Add*******\n");
    printf("********2.0 Min*******\n");
    printf("********3.0 Mul*******\n");
    printf("********4.0 Div*******\n");
    printf("********0.0 exit******\n");
}

void test()
{
    int n = 0;

    //实现计算器
    do
    {
        //打印菜单函数
        Print();

        //模式选择
        printf("请选择您要使用的模式：");
        scanf("%d", &n);

        //利用switch语句实现多条路径的选择
        switch (n)
        {
            //加法函数
            case 1:
                calc(Add);
                break;

            //减法函数
            case 2:
                calc(Min);
                break;
            
            //乘法函数
            case 3:
                calc(Mul);
                break;

            //除法函数
            case 4:
                calc(Div);
                break;

            //选择退出
            case 0:
                printf("退出计算器\n");
                break;

            //选择错误
            default:
                printf("非法选择，请重新选择->");
                break;
        }
    } while (n);
}
int main()
{
    //实现计算器函数
    test();

    return 0;
}
